/*
 * 描          述:  <描述>
 * 修  改   人:  Administrator
 * 修改时间:  2018年6月17日
 * <修改描述:>
 */
package com.tx.core.support.json;

import com.alibaba.fastjson2.JSONObject;
import com.fasterxml.jackson.annotation.JsonIgnore;

/**
 * 支持json_attributes的接口实现<br/>
 * <功能详细描述>
 *
 * @author Administrator
 * @version [版本号, 2018年6月17日]
 * @see [相关类/方法]
 * @since [产品/模块版本]
 */
public interface JSONAttributesSupport {

    /**
     * 获取额外属性
     * 该方法用于获取对象的额外属性信息。这些属性可能是之前通过setAttributes方法设置的，
     * 用于扩展对象的功能或提供额外的元数据。
     *
     * @return 返回以字符串形式表示的属性信息。返回的字符串包含了对象的所有额外属性，
     * 其格式通常与setAttributes方法接受的字符串格式相同。具体格式取决于实现方法的具体实现。
     */
    public String getAttributes();


    /**
     * 设置额外属性
     * 该方法用于为对象设置额外的属性信息。这些属性可能用于扩展对象的功能或提供额外的元数据。
     *
     * @param attributes 以字符串形式表示的属性信息。该字符串应该遵循特定的格式规则，以便正确解析并设置属性。
     *                   具体的格式规则和解析逻辑取决于实现方法的具体实现。
     * @return void 该方法没有返回值。
     */
    public void setAttributes(String attributes);


    /**
     * 获取属性对应的JSONObject对象<br/>
     * 该方法用于创建并返回一个包含对象属性的JSONObject。通过内部创建一个监听器，
     * 来动态更新JSONObject的内容，确保返回的JSONObject能反映出对象属性的实时变化。
     *
     * @return JSONObject 返回一个动态更新的，包含对象属性的JSONObject
     */
    @JsonIgnore
    public default JSONObject getAttributeJSONObject() {
        // 创建并初始化属性监听器，用于响应属性变化并更新JSONObject
        AttributesAbleJSONObjectChangeListener listener = new AttributesAbleJSONObjectChangeListener(
                this);
        // 创建一个代理JSONObject，该JSONObject会根据属性监听器的变化动态更新内容
        JSONObject json = JSONObjectChangeListener.newProxy(listener);

        return json;
    }

}